
const path = require('path');
const fs = require('fs');

// 明确路径
const pathname = path.resolve(__dirname);
// const pathname = path.resolve(__dirname, 'hello.txt');
// 得到一个已经被兑现的Promise实例
const p = Promise.resolve(pathname);

p.then(function(p){
    console.log('根据路径获取状态信息');
    // 用同步方法读取文件或目录的状态信息
    let stats = fs.statSync(p); 
    // 根据状态信息确定是文件还是目录
    let type = stats.isDirectory() ? 'directory' : stats.isFile() ? 'file' : 'unknow';
    // return { path: p, type: type };
    return { path: p, type }
}).then(function(info){
    // 如果是目录就获取目录内部的所有子项目
    if( info.type === 'directory' ) {
        let items = fs.readdirSync( info.path );
        // return { path: info.path, type: info.type, items: items };
        // return { ...info, items: items }
        return { ...info, items }
    }
    return info;
}).then(function(info){
    // 如果是目录就遍历其内部所有子项目
    if( info.type === 'directory' ) {
        console.log( '目录: ', info.path );
        info.items.forEach( item => console.log( '\t', item ) );
    }
    return info;
}).then(function(info){
    // 如果是文件就读取文件内容
    if( info.type === 'file' ) {
        let content = fs.readFileSync( info.path, 'utf8' );
        // return { path: info.path, type: info.type, content: content };
        return { ...info, content }
    }
    return info;
}).then(function(info){
    if( info.type === 'file' ) {
        console.log( '文件: ', info.path);
        // 如果是文件就输出文件内容
        console.log( info.content );
    }
}).catch(function(reason){
    console.log( '出错了: ' , reason );
}).finally(function(){
    console.log('完毕');
});